"""
ASN1 MMS Class Tag Definitions.

Values extracted from: https://github.com/ljy5490/scapy61850/blob/master/mms.py
"""
from scapy.asn1.asn1 import ASN1_Class_UNIVERSAL


class ASN_Tags_MMS(ASN1_Class_UNIVERSAL):
    name = "MMS"

    # PDUs
    CONFIRMED_REQUEST_PDU = 0xa0
    CONFIRMED_RESPONSE_PDU = 0xa1
    UNCONFIRMED_PDU = 0xa3
    INITIATE_REQUEST_PDU = 0xa8
    INITIATE_RESPONSE_PDU = 0xa9

    # UnconfirmedService
    INFORMATION_REPORT = 0xa0

    # InformationReport
    INFORMATION_REPORT_LIST_OF_ACCESS_RESULT = 0xa0

    # AccessResult
    FAILURE = 0x80

    # Requests
    GET_NAME_LIST_REQUEST = 0xa1
    READ_REQUEST = 0xa4
    WRITE_REQUEST = 0xa5
    GET_VARIABLE_ACCESS_ATTRIBUTES_REQUEST = 0xa6
    DEFINE_NAMED_VARIABLE_LIST_REQUEST = 0xab
    GET_NAMED_VARIABLE_LIST_ATTRIBUTES_REQUEST = 0xac
    DELETE_NAMED_VARIABLE_LIST_REQUEST = 0xad

    # Specifics
    VMD_SPECIFIC = 0x80
    DOMAIN_SPECIFIC = 0xa1
    AA_SPECIFIC = 0x82

    # InitiateRequestPdu
    LOCAL_DETAIL_CALLING = 0x80
    PROPOSED_MAX_SERV_OUTSTANDING_CALLING = 0x81
    PROPOSED_MAX_SERV_OUTSTANDING_CALLED = 0x82
    PROPOSED_DATA_STRUCTURE_NESTING_LEVEL = 0x83
    MMS_INIT_REQUEST_DETAIL = 0xa4

    # InitRequestDetail
    PROPOSED_VERSION_NUMBER = 0x80
    PROPOSED_PARAMETER_CBB = 0x81
    SERVICES_SUPPORTED_CALLING = 0x82

    # InitiateResponsePdu
    LOCAL_DETAIL_CALLED = 0x80
    NEGOTIATED_MAX_SERV_OUTSTANDING_CALLING = 0x81
    NEGOTIATED_MAX_SERV_OUTSTANDING_CALLED = 0x82
    NEGOTIATED_DATA_STRUCTURE_NESTING_LEVEL = 0x83
    MMS_INIT_RESPONSE_DETAIL = 0xa4

    # InitResponseDetail
    NEGOTIATED_VERSION_NUMBER = 0x80
    NEGOTIATED_PARAMETER_CBB = 0x81
    SERVICES_SUPPORTED_CALLED = 0x82

    VMD_STATE = 0x80

    # GetNameListRequest
    OBJECT_CLASS = 0xa0
    OBJECT_SCOPE = 0xa1
    CONTINUE_AFTER = 0x82

    # objectScope
    OBJECT_SCOPE_VMD_SPECIFIC = 0x80
    OBJECT_SCOPE_DOMAIN_SPECIFIC = 0x81
    OBJECT_SCOPE_AA_SPECIFIC = 0x82

    # ObjectClass
    BASIC_OBJECT_CLASS = 0x80

    # ReadRequest
    READ_REQUEST_SPECIFICATION_WITH_RESULT = 0x80
    READ_REQUEST_VARIABLE_ACCESS_SPECIFICATION = 0xa1

    # WriteRequest
    LIST_OF_DATA = 0xa0

    # GetVariableAccessAttributesRequest
    NAME = 0xa0

    # Data
    DATA_TYPE_ARRAY = 0xa1
    DATA_TYPE_STRUCTURE = 0xa2
    DATA_TYPE_BOOLEAN_ = 0x83
    DATA_TYPE_BIT_STRING = 0x84
    DATA_TYPE_INTEGER = 0x85
    DATA_TYPE_UNSIGNED = 0x86
    DATA_TYPE_FLOATING_POINT = 0x87
    DATA_TYPE_OCTET_STRING = 0x89
    DATA_TYPE_VISIBLE_STRING = 0x8a
    DATA_TYPE_BINARY_TIME = 0x8c
    DATA_TYPE_MMS_STRING = 0x90
    DATA_TYPE_UTC_TIME = 0x91

    # VariableAccessSpecification
    VARIABLE_ACCESS_SPECIFICATION_LIST_OF_VARIABLE = 0xa0
    VARIABLE_ACCESS_SPECIFICATION_VARIABLE_LIST_NAME = 0xa1

    TYPE_SPECIFICATION_ARRAY = 0xa1
    TYPE_SPECIFICATION_STRUCTURE = 0xa2
    TYPE_SPECIFICATION_BOOLEAN_ = 0x83
    TYPE_SPECIFICATION_BIT_STRING = 0x84
    TYPE_SPECIFICATION_INTEGER = 0x85
    TYPE_SPECIFICATION_UNSIGNED = 0x86
    TYPE_SPECIFICATION_FLOATING_POINT = 0xa7
    TYPE_SPECIFICATION_OCTET_STRING = 0x89
    TYPE_SPECIFICATION_VISIBLE_STRING = 0x8a
    TYPE_SPECIFICATION_BINARY_TIME = 0x8c
    TYPE_SPECIFICATION_MMS_STRING = 0x90
    TYPE_SPECIFICATION_UTC_TIME = 0x91
